home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
Pakiet internetowy
/
Rozne
/
HTTrack 3.40-2
/
httrack-3.40-2.exe
/
{app}
/
src
/
proxy
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
2006-04-09
|
5KB
|
165 lines
/* ------------------------------------------------------------ */
/*
HTTrack Website Copier, Offline Browser for Windows and Unix
Copyright (C) Xavier Roche and other contributors
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Please visit our Website: http://www.httrack.com
*/
/* ------------------------------------------------------------ */
/* File: ProxyTrack, httrack cache-based proxy */
/* Author: Xavier Roche */
/* ------------------------------------------------------------ */
/* Standard includes */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <ctype.h>
#include "htsbase.h"
#include "htsnet.h"
#include "htslib.h"
#include "store.h"
#include "proxytrack.h"
#ifndef _WIN32
#include <signal.h>
static void sig_brpipe( int code ) {
/* ignore */
}
#endif
static int scanHostPort(const char* str, char *host, int *port) {
char* pos = strrchr(str, ':');
if (pos != NULL) {
int n = (int) ( pos - str );
if (n < 256) {
host[0] = '\0';
strncat(host, str, n);
if (sscanf(pos + 1, "%d", port) == 1) {
return 1;
}
}
}
return 0;
}
int main(int argc, char* argv[])
{
int i;
int ret = 0;
int proxyPort, icpPort;
char proxyAddr[256 + 1], icpAddr[256 + 1];
PT_Indexes index;
#ifdef _WIN32
{
WORD wVersionRequested; // requested version WinSock API
WSADATA wsadata; // Windows Sockets API data
int stat;
wVersionRequested = 0x0101;
stat = WSAStartup( wVersionRequested, &wsadata );
if (stat != 0) {
fprintf(stderr, "Winsock not found!\n");
return -1;
} else if (LOBYTE(wsadata.wVersion) != 1 && HIBYTE(wsadata.wVersion) != 1) {
fprintf(stderr, "WINSOCK.DLL does not support version 1.1\n");
WSACleanup();
return -1;
}
}
#endif
/* Args */
printf("ProxyTrack %s, build proxies upon HTTrack Website Copier Archives\n", PROXYTRACK_VERSION);
printf("Copyright (C) Xavier Roche and other contributors\n");
printf("\n");
printf("This program is free software; you can redistribute it and/or\n");
printf("modify it under the terms of the GNU General Public License\n");
printf("as published by the Free Software Foundation; either version 2\n");
printf("of the License, or any later version.\n");
printf("\n");
printf("*** This version is a development release ***\n");
printf("\n");
if (argc < 3
|| !scanHostPort(argv[1], proxyAddr, &proxyPort)
|| !scanHostPort(argv[2], icpAddr, &icpPort))
{
fprintf(stderr, "usage: %s <proxy-addr:proxy-port> <ICP-addr:ICP-port> [ ( <new.zip path> | <new.ndx path> | --list <file-list> ) ..]\n", argv[0]);
fprintf(stderr, "\texample:%s proxy:8080 localhost:3130 /home/archives/www-archive-01.zip /home/old-archives/www-archive-02.ndx\n", argv[0]);
return 1;
}
index = PT_New();
for(i = 3 ; i < argc ; i++) {
if (argv[i][0] == '-') {
if (strcmp(argv[i], "--list") == 0) {
if (i + 1 < argc) {
char line[256 + 1];
FILE *fp = fopen(argv[++i], "rb");
if (fp == NULL) {
fprintf(stderr, "error: could not process list %s\n", argv[i]);
exit(1);
}
while(linput(fp, line, 256)) {
int itemsAdded = PT_AddIndex(index, line);
if (itemsAdded > 0) {
fprintf(stderr, "processed: %s (%d items added)\n", line, itemsAdded);
} else if (itemsAdded == 0) {
fprintf(stderr, "processed: %s (no items added)\n", line);
} else {
fprintf(stderr, "error: could not process %s\n", line);
}
}
fclose(fp);
}
} else {
fprintf(stderr, "* bad arg %s\n", argv[i]);
exit(1);
}
} else {
int itemsAdded = PT_AddIndex(index, argv[i]);
if (itemsAdded > 0) {
fprintf(stderr, "processed: %s (%d items added)\n", argv[i], itemsAdded);
} else if (itemsAdded == 0) {
fprintf(stderr, "processed: %s (no items added)\n", argv[i]);
} else {
fprintf(stderr, "error: could not process %s\n", argv[i]);
}
}
}
/* sigpipe */
#ifndef _WIN32
signal( SIGPIPE , sig_brpipe ); // broken pipe (write into non-opened socket)
#endif
/* Go */
ret = proxytrack_main(proxyAddr, proxyPort, icpAddr, icpPort, index);
/* Wipe */
PT_Delete(index);
#ifdef _WIN32
WSACleanup();
#endif
return ret;
}